/**
 * 
 */
package com.youxin.cpcenter.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.youxin.busfoundation.bean.leads.LeadsStatTotalBean;
import com.youxin.busfoundation.bean.leads.QueryStatBean;
import com.youxin.busfoundation.enums.FollowLeadsStatus;
import com.youxin.cpcenter.dao.TbEntCluePoolCompanyMapper;
import com.youxin.cpcenter.model.TbEntLeadsStat;
import com.youxin.cpcenter.service.LeadsStatService;
import com.youxin.foundation.utils.ArrayUtils;

/**
 * @description
 * @author yingde.cao
 * @date 2017年12月13日
 * @version 1.0
 */
@Service("leadsStatService")
public class LeadsStatServiceImpl implements LeadsStatService{
	
	
	
	@Autowired
	private TbEntCluePoolCompanyMapper tbEntCluePoolCompanyMapper;
	
	/**
	 * 获取线索统计数据
	 * @description 
	 * @param id
	 * @return
	 */
	public TbEntLeadsStat getTbEntLeadsStat(long id)
	{
		return getTbEntLeadsStat(id, 0L);
	}
	
	public TbEntLeadsStat getTbEntLeadsStat(long id,long entMemberId)
	{		
		QueryStatBean bean=new QueryStatBean();		
		bean.setEntIdentifyId(id);
		if(entMemberId>0L)
		{
			bean.setEntMemberId(entMemberId);
		}
		List<LeadsStatTotalBean> list=tbEntCluePoolCompanyMapper.queryStat(bean);
		TbEntLeadsStat entity=new TbEntLeadsStat();;
		if(ArrayUtils.isEmpty(list))
		{
			entity.setId(id);
			entity.setUnfollow(0);
			entity.setFollow(0);
			entity.setDealDone(0);
			entity.setHaveIntention(0);			
		}else{
			for(LeadsStatTotalBean item:list){
				FollowLeadsStatus leadsStatus=FollowLeadsStatus.valueOf(item.getStatus());
				switch (leadsStatus) {
				case UnFollow:
					entity.setUnfollow(item.getTotal());
					break;
				case Flollowing:
					entity.setFollow(item.getTotal());
					break;
				case HaveIntention:
					entity.setHaveIntention(item.getTotal());
					break;
				case DealDone:
					entity.setDealDone(item.getTotal());
					break;
				default:
					break;
				}
			}
		}
		return entity;
	}
	/**
	 * 添加线索
	 */
//	@Transactional(propagation = Propagation.REQUIRED)
//	public void addLeadsStat(boolean isAdmin,UserInfo userInfo)
//	{
//		boolean isSuccess=updateLeadsStat(userInfo, (t)->{
//			if(isAdmin)
//			{
//				t.setUnfollow(1);
//			}else{
//				t.setFollow(1);
//			}
//		});
//		if(!isSuccess)
//		{
//			throw new BusinessDataException(BusinessMessages.LEADS_ADD_FAILURE);
//		}
//	}
	/**
	 * 释放
	 * @description 
	 * @param userInfo
	 * @param leadsId
	 */
//	@Transactional(propagation = Propagation.REQUIRED)
//	public void releaseLeadsStat(UserInfo userInfo,TbEntCluePoolCompany sourceEntity)
//	{		
//		boolean isSuccess=updateLeadsStat(userInfo, (t)->{
//			short status=sourceEntity.getStatus();
//			if(status==FollowLeadsStatus.HaveIntention.getValue()){
//				t.setHaveIntention(-1);
//			}else if(status==FollowLeadsStatus.HaveIntention.getValue())
//			{
//				t.setDealDone(-1);
//			}
//			else{
//				t.setFollow(-1);
//			}
//			t.setUnfollow(1);
//		});
//		if(!isSuccess)
//		{
//			throw new BusinessDataException(BusinessMessages.LEADS_ADD_FAILURE);
//		}
//	}
	
//	private void updateStatus(TbEntLeadsStat t,short status,int diff)
//	{
//		if(status==FollowLeadsStatus.HaveIntention.getValue()){
//			t.setHaveIntention(diff);
//		}else if(status==FollowLeadsStatus.DealDone.getValue())
//		{
//			t.setDealDone(diff);
//		}else if(status==FollowLeadsStatus.Flollowing.getValue())
//		{
//			t.setFollow(diff);
//		}
//		else{
//			t.setUnfollow(diff);
//		}
//	}
	
	/**
	 * 修改线索状态
	 * @description 
	 * @param userInfo
	 * @param sourceEntity
	 */
//	@Transactional(propagation = Propagation.REQUIRED)
//	public void changeStatusLeadsStat(UserInfo userInfo,TbEntCluePoolCompany sourceEntity,short leadsStatus)
//	{		
//		boolean isSuccess=updateLeadsStat(userInfo, (t)->{
//			short status=sourceEntity.getStatus();
//			updateStatus(t, leadsStatus, -1);
//			updateStatus(t, status, 1);
//		});
//		if(!isSuccess)
//		{
//			throw new BusinessDataException(BusinessMessages.LEADS_ADD_FAILURE);
//		}
//	}
	
	/**
	 * 认领线索
	 * @description 
	 * @param userInfo
	 * @param leadsId
	 */
//	@Transactional(propagation = Propagation.REQUIRED)
//	public void requestLeadsStat(UserInfo userInfo,TbEntCluePoolCompany sourceEntity)
//	{		
//		boolean isSuccess=updateLeadsStat(userInfo, (t)->{
//			t.setFollow(1);
//			t.setUnfollow(-1);
//		});
//		if(!isSuccess)
//		{
//			throw new BusinessDataException(BusinessMessages.LEADS_ADD_FAILURE);
//		}
//	}
	
	
//	public boolean updateLeadsStat(UserInfo userInfo,ExecuteFunction<TbEntLeadsStat> execute){
//		TbEntLeadsStat entity=new TbEntLeadsStat();
//		entity.setId(userInfo.getEntIdentifyId());
//		entity.setCompanyName(userInfo.getCompanyName());
//		entity.setCompanyUid(userInfo.getCompanyUid());
//		entity.setUnfollow(0);
//		entity.setFollow(0);
//		entity.setDealDone(0);
//		entity.setHaveIntention(0);	
//		if(execute!=null)
//		{
//			execute.execute(entity);
//		}
//		int rowEffected=tbEntLeadsStatMapper.updateByPrimaryKeySelective(entity);
//		if(rowEffected==0)
//		{
//			if(entity.getUnfollow()<0)
//			{
//				entity.setUnfollow(0);
//			}
//			if(entity.getFollow()<0)
//			{
//				entity.setFollow(0);
//			}
//			if(entity.getDealDone()<0)
//			{
//				entity.setDealDone(0);
//			}
//			if(entity.getHaveIntention()<0)
//			{
//				entity.setHaveIntention(0);
//			}			
//			rowEffected=tbEntLeadsStatMapper.insertDuplicateUpdate(entity);
//			return rowEffected==1;
//		}
//		return true;		
//	}
	
	
}
